import paramiko
import psycopg2

# get sentinel2 tile list
def get_tiles(province):
	con = psycopg2.connect(
	database="sentinel2",
	user="postgres",
	password="12345",
	host="192.168.2.172",
	port="5432"
	)
	cur = con.cursor()
	sql = f"""
	SELECT "中国有效哨兵格网分布wgs84".mgrs
	FROM china_sy
	JOIN "中国有效哨兵格网分布wgs84" 
	on st_intersects(china_sy.geom,"中国有效哨兵格网分布wgs84".geom)
	WHERE  china_sy.qhmc = '{province}' 
	"""
	cur.execute(sql)
	con.commit()
	tiles=[
		record[0].upper() 
		for record in cur.fetchall()
		]
	cur.close()
	con.close()
	return tiles

def ssh_client():
    province = input("请输入省份（例如：河南省）：")
    if province == "":
        tiles = input("请输入图幅列表（例如：49slh-50shk）：")
        
    else:
        tiles = "-".join(get_tiles(province))
    yearmonth = input("请输入年月（例如：202203）：")
    while yearmonth=="":
        yearmonth = input("请输入年月（例如：202203）：")
    period = input("请输入时期（例如：3000）：")
    while period=="":
        period = input("请输入时期（例如：3000）：")
    bands = input("请输入波段列表（例如：4-3-2）：")
    while bands=="":
        bands = input("请输入波段列表（例如：4-3-2）：")
    save_dir = input("请输入存储路径（例如：/data）：")
    while save_dir=="":
        save_dir = input("请输入存储路径（例如：/data）：")
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(
        hostname="192.168.1.82",
        port="22", 
        username="root", 
        password="000000")
    params = [
        "/home/fengyangyang/python_env_1/bin/python",
        # "conda run -p /home/fengyangyang/python_env_1 --no-capture-output --live-stream python",
        "/home/fengyangyang/projection_1/Gy100BandsRaster.py",
        f"--tiles {tiles}",
        f"--yearmonth {yearmonth}",
        f"--period {period}",
        f"--bands {bands}",
        f"--save_dir {save_dir}",
    ]
    command = " ".join(params)
    shell = ssh.invoke_shell()
    shell.settimeout(900)
    shell.send('export LANG=en_US.UTF-8 \n') #解决错误的关键，编码问题
    # shell.send('export LANGUAGE=en \n')
    shell.send(command+'\n')
    buff = ''
    while not buff.endswith('# '):
        out = shell.recv(1024)
        buff += out.decode('utf8')
        print(out.decode('utf8'))     
    # stdin,stdout,stderr = ssh.exec_command(command, bufsize=-1)
    #stdin  标准格式的输入，是一个写权限的文件对象
    #stdout 标准格式的输出，是一个读权限的文件对象
    #stderr 标准格式的错误，是一个写权限的文件对象
    # print(stdout.read().decode())
    ssh.close()
    return

if __name__ == "__main__":
    ssh_client()